package aliyun

import (
	"fmt"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"github.com/schollz/progressbar/v3"
)

// a5写一个构造函数 好好体会写代码的逻辑
func NewDefaultProgressListener() *ProgressListener {
	return &ProgressListener {

	}
}
// a1. 实现一个listener监听器  先构建对象
type ProgressListener struct{  
	// a8 你作为一个进度条的监听对象 肯定要负责展示 要拉v3的库
	bar *progressbar.ProgressBar
}

// a2. 方法是什么 我们去看官方文档里面接口的方法
func (p *ProgressListener) ProgressChanged(event *oss.ProgressEvent) {
	// a7 传递进来后我们先测一下 打印一下
	// 我们获取到了事件 然后根据在这个事件做进度条 我们找一个第三方的进度条UI库去实现
	// 考虑如何把上传事件传递到ui组件里面去
	fmt.Println(event.EventType, event.TotalBytes, event.RwBytes)
	switch event.EventType {
	case oss.TransferStartedEvent:
		p.bar = progressbar.DefaultBytes(
			event.TotalBytes,
			"文件上传中",
		)
	case oss.TransferDataEvent:
		p.bar.Add64(event.RwBytes)
	case oss.TransferCompletedEvent:
		fmt.Printf("\n上传完成\n")
	case oss.TransferFailedEvent:
		fmt.Printf("\n上传失败\n")
	default:
	}
}

